iT邦幫忙

2024 iThome 鐵人賽

DAY 5
1

第5章: 了解App的生命週期

App的啟動與關閉

在行動應用程式的開發過程中,理解應用程式的生命週期是至關重要的。應用程式的生命週期包括了從啟動到關閉的所有階段,了解這些階段能幫助開發者更好地管理應用程式的資源、優化性能,並提供更流暢的用戶體驗。
當用戶啟動一個應用程式時,系統會創建一個新的進程,並初始化應用程式的主要元件(如活動、服務等)。啟動過程通常包括以下步驟:
1. Application 啟動:系統首先創建應用程式類(Application),這是應用程式的入口點。在這裡,你可以初始化全局變數或設定一些應用程式級別的設置。
2. Activity 創建:接著,系統會創建應用程式的第一個活動(Activity),並調用它的 onCreate 方法來進行初始化操作,如加載佈局、設定 UI 元件等。
3. Activity 啟動:onCreate 之後,系統會依次調用 onStart 和 onResume 方法,使應用程式進入前台並開始與用戶互動。
當用戶或系統決定關閉應用程式時,生命週期也相應地進入關閉階段。這時候,應用程式的進程會被終止,並且所有的資源都會被釋放。通常的關閉過程包括:
1. Activity 停止:當應用程式不再處於前台,系統會依次調用活動的 onPause 和 onStop 方法,暫停與用戶的互動並釋放不必要的資源。
2. Activity 銷毀:如果應用程式需要被完全關閉,系統會調用 onDestroy 方法來釋放所有的資源,並最終結束應用程式的進程。

活動的生命周期

在 Android 平台上,Activity 是應用程式的核心元件之一,每個 Activity 都有其獨立的生命週期。理解並管理這些生命週期的回調方法能夠幫助開發者在適當的時候執行相應的邏輯,確保應用程式的穩定性與流暢性。
一個 Activity 的生命週期包括以下主要階段:
1. onCreate:
◦ 當 Activity 首次被創建時,系統會調用 onCreate 方法。這是設置活動介面、初始化變數、加載資源的最佳時機。
◦ 例如,在這個階段,你可以使用 Activity.LoadLayout("MainLayout") 來加載介面佈局。
2. onStart:
◦ 當 Activity 變得對用戶可見時,系統會調用 onStart 方法。在這裡,Activity 仍然處於非互動狀態,但已經進入前台。
◦ 此階段通常用於啟動需要在活動可見時運行的服務或邏輯,如背景音樂。
3. onResume:
◦ 當 Activity 開始與用戶交互時,系統會調用 onResume 方法。此時,Activity 已經完全可見並處於前台,所有的輸入事件(如點擊、觸摸等)都會被處理。
◦ 這是執行需要用戶直接參與的邏輯的地方,例如恢復遊戲狀態或重新加載 UI 元件。
4. onPause:
◦ 當用戶離開當前 Activity(例如切換到另一個應用程式)時,系統會調用 onPause 方法。在這裡,應用程式應該保存用戶數據並釋放不必要的資源。
◦ 例如,當一個音樂播放應用程式進入 onPause 階段時,應暫停音樂播放以節省資源。
5. onStop:
◦ 當 Activity 完全不可見時,系統會調用 onStop 方法。此時應用程式應該釋放更多的資源,避免不必要的內存佔用。
◦ 常見的操作包括保存應用程式狀態至永久存儲或釋放大數據對象。
6. onDestroy:
◦ 當 Activity 被銷毀時,系統會調用 onDestroy 方法。在這裡,應用程式需要清理所有的資源,以防止內存洩漏。
◦ 例如,釋放使用過的資料庫連接或終止未完成的網路請求。
7. onRestart:
◦ 當 Activity 從停止狀態重新啟動時,系統會調用 onRestart 方法。通常這是一個短暫的過程,之後緊接著會調用 onStart 方法。
以下是 Activity 生命週期的範例程式碼:

Sub Activity_Create(FirstTime As Boolean)
    ' 創建Activity
    Activity.LoadLayout("MainLayout")
    Log("Activity Created")
End Sub

Sub Activity_Start
    ' Activity 可見但不可互動
    Log("Activity Started")
End Sub

Sub Activity_Resume
    ' Activity 開始與用戶互動
    Log("Activity Resumed")
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    ' Activity 暫停
    Log("Activity Paused")
End Sub

Sub Activity_Stop
    ' Activity 完全不可見
    Log("Activity Stopped")
End Sub

Sub Activity_Destroy
    ' Activity 被銷毀
    Log("Activity Destroyed")
End Sub

管理不同的狀態

應用程式在運行過程中,經常需要處理不同的狀態變化。這些狀態包括螢幕旋轉、用戶切換應用程式、應用程式進入後台等。有效地管理這些狀態,能夠確保應用程式在各種情況下都能穩定運行。
處理配置變更
配置變更(如螢幕旋轉)是最常見的應用程式狀態變化之一。當配置發生變更時,系統會自動銷毀並重新創建 Activity。為了保留應用程式的狀態,你可以選擇以下兩種策略:
1. 在 onSaveInstanceState 中保存狀態:
◦ 使用 onSaveInstanceState 方法保存 Activity 的狀態,當 Activity 被重新創建時,可以在 onRestoreInstanceState 或 onCreate 中恢復這些狀態。

       Sub Activity_SaveInstanceState (OutState As Bundle)
           OutState.Put("count", currentCount)
           Log("State Saved")
       End Sub
       
       Sub Activity_RestoreInstanceState (InState As Bundle)
           currentCount = InState.Get("count")
           Log("State Restored")
       End Sub
       ```
    2. 在清單檔案中處理配置變更:
        ◦ 可以在 AndroidManifest.xml 中設定 Activity 來手動處理特定的配置變更,避免 Activity 被銷毀和重建。
   <activity android:name=".MainActivity"
       android:configChanges="orientation|screenSize" />
       ```

處理應用程式進入後台

當用戶切換到另一個應用程式時,你的應用程式會進入後台。這時,你可能需要釋放一些資源,或根據情況決定是否需要保存狀態。常見的操作包括:
• 暫停正在進行的網路請求。
• 保存用戶的當前進度或資料。
• 停止耗電的功能(如 GPS 定位、背景音樂播放等)。
透過在 onPause 或 onStop 中適當管理這些狀態,你可以確保應用程式即使在背景中運行也能保持良好的性能和用戶體驗。
總結來說,理解並有效管理應用程式的生命週期是開發高品質 Android 應用程式的關鍵。透過掌握 Activity 的各個生命週期回調方法,並學會在不同狀態下適當管理資源,你將能夠創建出穩定且響應迅速的應用程式。
參考網址
https://www.b4x.com/android/forum/


上一篇
Basic30天學會行動App-第4章.實作App
下一篇
Basic30天學會行動App-第6章.調試App
系列文
用最接近自然語言的Basic30天學會行動App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言